package fr.syntheses.blog.controller;

import fr.syntheses.blog.beans.*;
import fr.syntheses.blog.Model.DAO.*;
import fr.syntheses.blog.Service.sax.*;

import fr.syntheses.blog.Service.Log.MyActionSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;

import org.apache.catalina.Session;
import org.apache.log4j.Logger;
import org.apache.struts2.interceptor.SessionAware;

import fr.syntheses.blog.Service.mailler.MailServices;

import com.opensymphony.xwork2.Preparable;



//import com.opensymphony.xwork2.ActionContext;



@SuppressWarnings("serial")
public class UserController extends MyActionSupport implements SessionAware ,Preparable {
	
	Logger log = Logger.getLogger(currentClassToLog);
	
	private Map<String,Object> maSession;

	private Avatar avatar;
	private Pays pays;
	private Style style;
	private Centredinterets centredinterets;
	private Utilisateur utilisateur;
	private FicheUtilisateur fiche;
	private Article article;
	private Commentaire commentaire;
	private List<Avatar> listeAvatar;
	private List<Categorie> listeCategorie;
	private List<Pays> listePays;
	private List<Style> listeStyle;
	private List<Centredinterets> listeInterets;
	private List<Utilisateur> listeUtilisateur;
	private List<FicheUtilisateur> listeFiche;
	private List<Article> listeArticle;
	private List<Commentaire> listeCommentaire;
	private AvatarDAO avatarDao = new AvatarDAO();
	private CategorieDAOH categorieDaoH = new CategorieDAOH();
	private PaysDAO paysDao = new PaysDAO();
	private StyleDAO styleDao = new StyleDAO();
	private CentredinteretsDAO centredinteretsDao = new CentredinteretsDAO();
	//private UtilisateurDAO utilisateurDao = new UtilisateurDAO();
	private UtilisateurDAOH utilisateurDao = new UtilisateurDAOH();
	private FicheUtilisateurDAO ficheDao = new FicheUtilisateurDAO();
	//private ArticleDAO articleDao = new ArticleDAO();
	private ArticleDAOH articleDaoH = new ArticleDAOH();
	private CommentaireDAO commentaireDao = new CommentaireDAO();	
	private ReadFile fileXml = new ReadFile();
	private static final long serialVersionUID = 1L;
	private Mail mail;
	private String pass;
	private HttpServletRequest request;
	MailServices serviceMail = new MailServices();

/*	@Override
	public void prepare() throws Exception {




	 dispatcher of action !

	if ( ActionContext.getContext().getName().equals("indexBis")) {
		//listeArticle=(ArrayList<Article>)articleDao.getListeArticle();
	}
	


		
	}
*/	
	
	
	
	public void listeAvatar() {
		
	}

	public void modifierStyleparDefaut() {
		
	}

	public void ajouterUtilisateur() { 
	}
	
	// Struts ACTION METHODS

	/**
	 * Struts Action methods retourne la liste des utilisateurs
	 * @return String 
	 */
	public String listerUtilisateur() {
		// log entering in name of method
		log.debug("Method : listerUtilisateur");

		listeUtilisateur=(ArrayList<Utilisateur>)utilisateurDao.getListeUtilisateur();
		// log exit (name of method) with listeUtilisateur.size
		log.debug("exit listerUtilisateur size:"+listeUtilisateur.size());
		return SUCCESS;

	}
	
	
	
	// other METHODS
	
//	public String doIt() {
//		return "no !";
//	}

	/**
	 * @return the listeArticle
	 */
	public List<Article> getListeArticle() {
		return listeArticle;
	}




	/**
	 * @param listeArticle the listeArticle to set
	 */
	public void setListeArticle(List<Article> listeArticle) {
		this.listeArticle = listeArticle;
	}




	public void modifierUtilisateur() {
		
	}

	public void supprimerUtilisateur() {
		
	}

	public void maillerUtilisateur() {
		
	}

	public void changerLangue() {
		 
	}

	public void modifierStyleCourant() {
		 
	}

	public void recuperermdp() {
		 
	}

	public void renvoyermdpMail() {
		 
	}

	public void senregistrer() {
		 
	}

	public void modifiersonStyle() {
		 
	}

	public void supprimerCompte() {
		 
	}

	public String seconnecter() {
		log.debug("Method : seconnecter");
		
		
		utilisateur = utilisateurDao.getUtilisateur(utilisateur);
		
		log.debug("exit seconnecter id:"+utilisateur.getId());
		
		if (utilisateur.equals(null)){
			return ERROR;
		}
		else{
			// ok mise en session de l'utilisateur !
			maSession.put("currentUser", utilisateur);
			return SUCCESS;
		}
	}

	public void sedeconnecter() {
		 
	}

	/**
	 * @return the avatar
	 */
	public Avatar getAvatar() {
		return avatar;
	}

	/**
	 * @param avatar the avatar to set
	 */
	public void setAvatar(Avatar avatar) {
		this.avatar = avatar;
	}

	/**
	 * @return the pays
	 */
	public Pays getPays() {
		return pays;
	}

	/**
	 * @param pays the pays to set
	 */
	public void setPays(Pays pays) {
		this.pays = pays;
	}

	/**
	 * @return the style
	 */
	public Style getStyle() {
		return style;
	}

	/**
	 * @param style the style to set
	 */
	public void setStyle(Style style) {
		this.style = style;
	}

	/**
	 * @return the centredinterets
	 */
	public Centredinterets getCentredinterets() {
		return centredinterets;
	}

	/**
	 * @param centredinterets the centredinterets to set
	 */
	public void setCentredinterets(Centredinterets centredinterets) {
		this.centredinterets = centredinterets;
	}

	/**
	 * @return the utilisateur
	 */
	public Utilisateur getUtilisateur() {
		return utilisateur;
	}

	/**
	 * @param utilisateur the utilisateur to set
	 */
	public void setUtilisateur(Utilisateur utilisateur) {
		this.utilisateur = utilisateur;
	}

	/**
	 * @return the fiche
	 */
	public FicheUtilisateur getFiche() {
		return fiche;
	}

	/**
	 * @param fiche the fiche to set
	 */
	public void setFiche(FicheUtilisateur fiche) {
		this.fiche = fiche;
	}

	/**
	 * @return the article
	 */
	public Article getArticle() {
		return article;
	}

	/**
	 * @param article the article to set
	 */
	public void setArticle(Article article) {
		this.article = article;
	}

	/**
	 * @return the commentaire
	 */
	public Commentaire getCommentaire() {
		return commentaire;
	}

	/**
	 * @param commentaire the commentaire to set
	 */
	public void setCommentaire(Commentaire commentaire) {
		this.commentaire = commentaire;
	}
	
	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}
	
	public Mail getMail() {
		return mail;
	}

	public void setMail(Mail mail) {
		this.mail = mail;
	}

	public HttpServletRequest getRequest() {
		return request;
	}

	public void setRequest(HttpServletRequest request) {
		this.request = request;
	}

	
	public String go() {
		System.out.println("??????" + article);
		return SUCCESS;
	}
	


	public String listeCategorie() {
		

		try {
			listeCategorie = (ArrayList<Categorie>)categorieDaoH.getListeCategorie();

		} catch (Exception e) {
					log.error("Erreur de lors de la récupération des categories " + e);
		}

		log.info("exit getCategories "  + "SUCCESS");
		//maSession.put("listeCategorie", listeCategorie);
		return SUCCESS;

	}

	/**
	 * @return the listeCategorie
	 */
	public List<Categorie> getListeCategorie() {
		return listeCategorie;
	}

	/**
	 * @param listeCategorie the listeCategorie to set
	 */
	public void setListeCategorie(List<Categorie> listeCategorie) {
		this.listeCategorie = listeCategorie;
	}

	public String ecrireArticle() {

				try {
					if (article.getContenu() != null) {
						log.info("????");
						articleDaoH.create(article);
					}
				} catch (Exception e) {
					log.error("Erreur de lors de la r�cup�ration du contenu tinymce " + e);
				}

				log.info("exit ecrireArticle "  + "SUCCESS");
			return SUCCESS;

	}
	
	
	public void modifArticle() {
	}

	public void supArticle() {
	}

	
	public String recupererArticlesDistant() {

		log.debug("Method: recupererArticlesDistant");

		listeArticle = fileXml.readFile("http://www.altenide.com/articles.xml");
		Iterator i = listeArticle.iterator();
		while(i.hasNext()){
			  articleDaoH.create((Article)i.next());
			}	
		log.debug("exit recupererArticlesDistant size:"+listeArticle.size());
		return SUCCESS;
		
	}

	public void listeCommentaires() {
	}

	public void publierCommentaire() {
	}

	public void modifierCommentaire() {
	}

	public void supprimerCommentaire() {
	}

	public void afficherArticle() {
	}

	public String homeFrontOffice() {
		// log entering in name of method
		log.debug("Method : listerArticles");
		listeArticle=(ArrayList<Article>)articleDaoH.getListeArticle();
		// list categorie
		
		// list all 
		// log exit (name of method) with listeArticle.size
		log.debug("exit listerArticles size:"+listeArticle.size());
		return SUCCESS;
		
	}

	public void paginerArticles() {
	}

	public void commenter() {
	}

	public void alerterCommentaire() {
	}

	/**
	 * @return the listeAvatar
	 */
	public List<Avatar> getListeAvatar() {
		return listeAvatar;
	}

	/**
	 * @param listeAvatar the listeAvatar to set
	 */
	public void setListeAvatar(List<Avatar> listeAvatar) {
		this.listeAvatar = listeAvatar;
	}

	/**
	 * @return the listePays
	 */
	public List<Pays> getListePays() {
		return listePays;
	}

	/**
	 * @param listePays the listePays to set
	 */
	public void setListePays(List<Pays> listePays) {
		this.listePays = listePays;
	}

	/**
	 * @return the listeStyle
	 */
	public List<Style> getListeStyle() {
		return listeStyle;
	}

	/**
	 * @param listeStyle the listeStyle to set
	 */
	public void setListeStyle(List<Style> listeStyle) {
		this.listeStyle = listeStyle;
	}

	/**
	 * @return the listeInterets
	 */
	public List<Centredinterets> getListeInterets() {
		return listeInterets;
	}

	/**
	 * @param listeInterets the listeInterets to set
	 */
	public void setListeInterets(List<Centredinterets> listeInterets) {
		this.listeInterets = listeInterets;
	}

	/**
	 * @return the listeUtilisateur
	 */
	public List<Utilisateur> getListeUtilisateur() {
		return listeUtilisateur;
	}

	/**
	 * @param listeUtilisateur the listeUtilisateur to set
	 */
	public void setListeUtilisateur(List<Utilisateur> listeUtilisateur) {
		this.listeUtilisateur = listeUtilisateur;
	}

	/**
	 * @return the listeFiche
	 */
	public List<FicheUtilisateur> getListeFiche() {
		return listeFiche;
	}

	/**
	 * @param listeFiche the listeFiche to set
	 */
	public void setListeFiche(List<FicheUtilisateur> listeFiche) {
		this.listeFiche = listeFiche;
	}

	/**
	 * @return the listeCommentaire
	 */
	public List<Commentaire> getListeCommentaire() {
		return listeCommentaire;
	}

	/**
	 * @param listeCommentaire the listeCommentaire to set
	 */
	public void setListeCommentaire(List<Commentaire> listeCommentaire) {
		this.listeCommentaire = listeCommentaire;
	}
	

	public String editor()
	{
	        return "editor";
	}
	
	public String envoiMailAction() {
		String motdepasse= "";
		log.info("Entering in envoiMailAction");
		// on r�cup�re les donn�es du formulaire
		String formMailAdress = mail.getMailAdress();
		String formMailSujet = "Récuperation de mot de passe";
		 motdepasse = utilisateurDao.getMdp(formMailAdress);
		String formMailContenu = "Votre mot de passe: "+ motdepasse;
		if (motdepasse.isEmpty()){
			addActionMessage("votre mot de passe n'existe pas");
		} else{
			
		String envoi = serviceMail.sendMail(formMailContenu, formMailAdress, formMailSujet);
		System.out.println("==========>" + envoi);
		addActionMessage("Nous vous avons envoyer votre mot de passe !");
		if (envoi != "") {
			mail.setMailError(envoi);
			return ERROR;
		}
		}	
		log.info("Exit envoiMailAction");
	
		return SUCCESS;
		
	}
	
	
	@Override
	public void setSession(Map<String, Object> maSession) {
		this.maSession = maSession;
	}

	@Override
	public void prepare() throws Exception {
	

		if (listeArticle != null) {
			System.out.println("preparable activée !" + getFieldErrors().size());
		listeArticle=(ArrayList<Article>)articleDaoH.getListeArticle();
		

		}
		
	}


}